home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / net.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  10KB  |  288 lines

  1. /*
  2.  * NET        An implementation of the SOCKET network access protocol.
  3.  *        This is the master header file for the Linux NET layer,
  4.  *        or, in plain English: the networking handling part of the
  5.  *        kernel.
  6.  *
  7.  * Version:    @(#)net.h    1.0.3    05/25/93
  8.  *
  9.  * Authors:    Orest Zborowski, <obz@Kodak.COM>
  10.  *        Ross Biro, <bir7@leland.Stanford.Edu>
  11.  *        Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  12.  *
  13.  *        This program is free software; you can redistribute it and/or
  14.  *        modify it under the terms of the GNU General Public License
  15.  *        as published by the Free Software Foundation; either version
  16.  *        2 of the License, or (at your option) any later version.
  17.  */
  18. #ifndef _LINUX_NET_H
  19. #define _LINUX_NET_H
  20.  
  21. #include <linux/config.h>
  22. #include <linux/wait.h>
  23. #include <linux/stringify.h>
  24. #include <asm/socket.h>
  25.  
  26. struct poll_table_struct;
  27. struct inode;
  28.  
  29. #define NPROTO        32        /* should be enough for now..    */
  30.  
  31. #define SYS_SOCKET    1        /* sys_socket(2)        */
  32. #define SYS_BIND    2        /* sys_bind(2)            */
  33. #define SYS_CONNECT    3        /* sys_connect(2)        */
  34. #define SYS_LISTEN    4        /* sys_listen(2)        */
  35. #define SYS_ACCEPT    5        /* sys_accept(2)        */
  36. #define SYS_GETSOCKNAME    6        /* sys_getsockname(2)        */
  37. #define SYS_GETPEERNAME    7        /* sys_getpeername(2)        */
  38. #define SYS_SOCKETPAIR    8        /* sys_socketpair(2)        */
  39. #define SYS_SEND    9        /* sys_send(2)            */
  40. #define SYS_RECV    10        /* sys_recv(2)            */
  41. #define SYS_SENDTO    11        /* sys_sendto(2)        */
  42. #define SYS_RECVFROM    12        /* sys_recvfrom(2)        */
  43. #define SYS_SHUTDOWN    13        /* sys_shutdown(2)        */
  44. #define SYS_SETSOCKOPT    14        /* sys_setsockopt(2)        */
  45. #define SYS_GETSOCKOPT    15        /* sys_getsockopt(2)        */
  46. #define SYS_SENDMSG    16        /* sys_sendmsg(2)        */
  47. #define SYS_RECVMSG    17        /* sys_recvmsg(2)        */
  48.  
  49. typedef enum {
  50.     SS_FREE = 0,            /* not allocated        */
  51.     SS_UNCONNECTED,            /* unconnected to any socket    */
  52.     SS_CONNECTING,            /* in process of connecting    */
  53.     SS_CONNECTED,            /* connected to socket        */
  54.     SS_DISCONNECTING        /* in process of disconnecting    */
  55. } socket_state;
  56.  
  57. #define __SO_ACCEPTCON    (1 << 16)    /* performed a listen        */
  58.  
  59. #ifdef __KERNEL__
  60.  
  61. #define SOCK_ASYNC_NOSPACE    0
  62. #define SOCK_ASYNC_WAITDATA    1
  63. #define SOCK_NOSPACE        2
  64.  
  65. #ifndef ARCH_HAS_SOCKET_TYPES
  66. /** sock_type - Socket types
  67.  * 
  68.  * When adding some new socket type please
  69.  * grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS
  70.  * overrides this enum for binary compat reasons.
  71.  * 
  72.  * @SOCK_STREAM - stream (connection) socket
  73.  * @SOCK_DGRAM - datagram (conn.less) socket
  74.  * @SOCK_RAW - raw socket
  75.  * @SOCK_RDM - reliably-delivered message
  76.  * @SOCK_SEQPACKET - sequential packet socket 
  77.  * @SOCK_PACKET - linux specific way of getting packets at the dev level.
  78.  *          For writing rarp and other similar things on the user level.
  79.  */
  80. enum sock_type {
  81.     SOCK_STREAM    = 1,
  82.     SOCK_DGRAM    = 2,
  83.     SOCK_RAW    = 3,
  84.     SOCK_RDM    = 4,
  85.     SOCK_SEQPACKET    = 5,
  86.     SOCK_PACKET    = 10,
  87. };
  88.  
  89. #define SOCK_MAX (SOCK_PACKET + 1)
  90.  
  91. #endif /* ARCH_HAS_SOCKET_TYPES */
  92.  
  93. /**
  94.  *  struct socket - general BSD socket
  95.  *  @state - socket state (%SS_CONNECTED, etc)
  96.  *  @flags - socket flags (%SOCK_ASYNC_NOSPACE, etc)
  97.  *  @ops - protocol specific socket operations
  98.  *  @fasync_list - Asynchronous wake up list
  99.  *  @file - File back pointer for gc
  100.  *  @sk - internal networking protocol agnostic socket representation
  101.  *  @wait - wait queue for several uses
  102.  *  @type - socket type (%SOCK_STREAM, etc)
  103.  *  @passcred - credentials (used only in Unix Sockets (aka PF_LOCAL))
  104.  */
  105. struct socket {
  106.     socket_state        state;
  107.     unsigned long        flags;
  108.     struct proto_ops    *ops;
  109.     struct fasync_struct    *fasync_list;
  110.     struct file        *file;
  111.     struct sock        *sk;
  112.     wait_queue_head_t    wait;
  113.     short            type;
  114.     unsigned char        passcred;
  115. };
  116.  
  117. struct vm_area_struct;
  118. struct page;
  119. struct kiocb;
  120. struct sockaddr;
  121. struct msghdr;
  122. struct module;
  123.  
  124. struct proto_ops {
  125.     int        family;
  126.     struct module    *owner;
  127.     int        (*release)   (struct socket *sock);
  128.     int        (*bind)         (struct socket *sock,
  129.                       struct sockaddr *myaddr,
  130.                       int sockaddr_len);
  131.     int        (*connect)   (struct socket *sock,
  132.                       struct sockaddr *vaddr,
  133.                       int sockaddr_len, int flags);
  134.     int        (*socketpair)(struct socket *sock1,
  135.                       struct socket *sock2);
  136.     int        (*accept)    (struct socket *sock,
  137.                       struct socket *newsock, int flags);
  138.     int        (*getname)   (struct socket *sock,
  139.                       struct sockaddr *addr,
  140.                       int *sockaddr_len, int peer);
  141.     unsigned int    (*poll)         (struct file *file, struct socket *sock,
  142.                       struct poll_table_struct *wait);
  143.     int        (*ioctl)     (struct socket *sock, unsigned int cmd,
  144.                       unsigned long arg);
  145.     int        (*listen)    (struct socket *sock, int len);
  146.     int        (*shutdown)  (struct socket *sock, int flags);
  147.     int        (*setsockopt)(struct socket *sock, int level,
  148.                       int optname, char __user *optval, int optlen);
  149.     int        (*getsockopt)(struct socket *sock, int level,
  150.                       int optname, char __user *optval, int __user *optlen);
  151.     int        (*sendmsg)   (struct kiocb *iocb, struct socket *sock,
  152.                       struct msghdr *m, size_t total_len);
  153.     int        (*recvmsg)   (struct kiocb *iocb, struct socket *sock,
  154.                       struct msghdr *m, size_t total_len,
  155.                       int flags);
  156.     int        (*mmap)         (struct file *file, struct socket *sock,
  157.                       struct vm_area_struct * vma);
  158.     ssize_t        (*sendpage)  (struct socket *sock, struct page *page,
  159.                       int offset, size_t size, int flags);
  160. };
  161.  
  162. struct net_proto_family {
  163.     int        family;
  164.     int        (*create)(struct socket *sock, int protocol);
  165.     /* These are counters for the number of different methods of
  166.        each we support */
  167.     short        authentication;
  168.     short        encryption;
  169.     short        encrypt_net;
  170.     struct module    *owner;
  171. };
  172.  
  173. struct iovec;
  174. struct kvec;
  175.  
  176. extern int         sock_wake_async(struct socket *sk, int how, int band);
  177. extern int         sock_register(struct net_proto_family *fam);
  178. extern int         sock_unregister(int family);
  179. extern int         sock_create(int family, int type, int proto,
  180.                  struct socket **res);
  181. extern int         sock_create_kern(int family, int type, int proto,
  182.                       struct socket **res);
  183. extern int         sock_create_lite(int family, int type, int proto,
  184.                       struct socket **res); 
  185. extern void         sock_release(struct socket *sock);
  186. extern int            sock_sendmsg(struct socket *sock, struct msghdr *msg,
  187.                   size_t len);
  188. extern int         sock_recvmsg(struct socket *sock, struct msghdr *msg,
  189.                   size_t size, int flags);
  190. extern int          sock_map_fd(struct socket *sock);
  191. extern struct socket *sockfd_lookup(int fd, int *err);
  192. #define             sockfd_put(sock) fput(sock->file)
  193. extern int         net_ratelimit(void);
  194. extern unsigned long net_random(void);
  195. extern void         net_srandom(unsigned long);
  196. extern void         net_random_init(void);
  197.  
  198. extern int            kernel_sendmsg(struct socket *sock, struct msghdr *msg,
  199.                     struct kvec *vec, size_t num, size_t len);
  200. extern int            kernel_recvmsg(struct socket *sock, struct msghdr *msg,
  201.                     struct kvec *vec, size_t num,
  202.                     size_t len, int flags);
  203.  
  204. #ifndef CONFIG_SMP
  205. #define SOCKOPS_WRAPPED(name) name
  206. #define SOCKOPS_WRAP(name, fam)
  207. #else
  208.  
  209. #define SOCKOPS_WRAPPED(name) __unlocked_##name
  210.  
  211. #define SOCKCALL_WRAP(name, call, parms, args)        \
  212. static int __lock_##name##_##call  parms        \
  213. {                            \
  214.     int ret;                    \
  215.     lock_kernel();                    \
  216.     ret = __unlocked_##name##_ops.call  args ;\
  217.     unlock_kernel();                \
  218.     return ret;                    \
  219. }
  220.  
  221. #define SOCKCALL_UWRAP(name, call, parms, args)        \
  222. static unsigned int __lock_##name##_##call  parms    \
  223. {                            \
  224.     int ret;                    \
  225.     lock_kernel();                    \
  226.     ret = __unlocked_##name##_ops.call  args ;\
  227.     unlock_kernel();                \
  228.     return ret;                    \
  229. }
  230.  
  231.  
  232. #define SOCKOPS_WRAP(name, fam)                    \
  233. SOCKCALL_WRAP(name, release, (struct socket *sock), (sock))    \
  234. SOCKCALL_WRAP(name, bind, (struct socket *sock, struct sockaddr *uaddr, int addr_len), \
  235.           (sock, uaddr, addr_len))                \
  236. SOCKCALL_WRAP(name, connect, (struct socket *sock, struct sockaddr * uaddr, \
  237.                   int addr_len, int flags),     \
  238.           (sock, uaddr, addr_len, flags))            \
  239. SOCKCALL_WRAP(name, socketpair, (struct socket *sock1, struct socket *sock2), \
  240.           (sock1, sock2))                    \
  241. SOCKCALL_WRAP(name, accept, (struct socket *sock, struct socket *newsock, \
  242.              int flags), (sock, newsock, flags)) \
  243. SOCKCALL_WRAP(name, getname, (struct socket *sock, struct sockaddr *uaddr, \
  244.              int *addr_len, int peer), (sock, uaddr, addr_len, peer)) \
  245. SOCKCALL_UWRAP(name, poll, (struct file *file, struct socket *sock, struct poll_table_struct *wait), \
  246.           (file, sock, wait)) \
  247. SOCKCALL_WRAP(name, ioctl, (struct socket *sock, unsigned int cmd, \
  248.              unsigned long arg), (sock, cmd, arg)) \
  249. SOCKCALL_WRAP(name, listen, (struct socket *sock, int len), (sock, len)) \
  250. SOCKCALL_WRAP(name, shutdown, (struct socket *sock, int flags), (sock, flags)) \
  251. SOCKCALL_WRAP(name, setsockopt, (struct socket *sock, int level, int optname, \
  252.              char __user *optval, int optlen), (sock, level, optname, optval, optlen)) \
  253. SOCKCALL_WRAP(name, getsockopt, (struct socket *sock, int level, int optname, \
  254.              char __user *optval, int __user *optlen), (sock, level, optname, optval, optlen)) \
  255. SOCKCALL_WRAP(name, sendmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len), \
  256.           (iocb, sock, m, len)) \
  257. SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len, int flags), \
  258.           (iocb, sock, m, len, flags)) \
  259. SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \
  260.           (file, sock, vma)) \
  261.           \
  262. static struct proto_ops name##_ops = {            \
  263.     .family        = fam,                \
  264.     .owner        = THIS_MODULE,            \
  265.     .release    = __lock_##name##_release,    \
  266.     .bind        = __lock_##name##_bind,        \
  267.     .connect    = __lock_##name##_connect,    \
  268.     .socketpair    = __lock_##name##_socketpair,    \
  269.     .accept        = __lock_##name##_accept,    \
  270.     .getname    = __lock_##name##_getname,    \
  271.     .poll        = __lock_##name##_poll,        \
  272.     .ioctl        = __lock_##name##_ioctl,    \
  273.     .listen        = __lock_##name##_listen,    \
  274.     .shutdown    = __lock_##name##_shutdown,    \
  275.     .setsockopt    = __lock_##name##_setsockopt,    \
  276.     .getsockopt    = __lock_##name##_getsockopt,    \
  277.     .sendmsg    = __lock_##name##_sendmsg,    \
  278.     .recvmsg    = __lock_##name##_recvmsg,    \
  279.     .mmap        = __lock_##name##_mmap,        \
  280. };
  281. #endif
  282.  
  283. #define MODULE_ALIAS_NETPROTO(proto) \
  284.     MODULE_ALIAS("net-pf-" __stringify(proto))
  285.  
  286. #endif /* __KERNEL__ */
  287. #endif    /* _LINUX_NET_H */
  288.